package com.itheima.aop;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;

/**
 * @Author：武鑫鹏
 * @Project：springboot-aop-quickstart
 * @Date：2024/5/23 9:57
 * @Filename：TimeApsect
 */
// @Component
@Slf4j
// @Aspect
public class TimeAspect {

    /**
     * 切面
     * @param joinPoint
     * @return
     * @throws Throwable
     */
    @Around("execution(* com.itheima.service.impl.DeptServiceImpl.*(..))") // 切入点表达式  就是来描述当前AOP程序针对于哪些方法编程
    public Object recordTime(ProceedingJoinPoint joinPoint) throws Throwable {

        // 获取开始时间
        long start = System.currentTimeMillis();

        // 执行原始方法
        Object proceed = joinPoint.proceed();

        // 获取结束时间
        long end = System.currentTimeMillis();

        // 打印耗时
        long time = end - start;
        log.info("耗时：{}", time);

        // 返回原始方法的返回值
        return proceed;
    }

    // @Before("execution(* com.itheima.service.impl.DeptServiceImpl.*(..))")
    // @Before("pointCut()")
    // public void beforeMethod(JoinPoint joinPoint) {
    //     log.info("before");
    // }
}
